package cn.itcast.nems.studentrecord.dao.condition;

import cn.itcast.nems.employee.dao.bean.EmployeeGroupBean;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;
import java.util.List;

/**
 * 功能描述: 退学凭单-头 分页查询条件
 * <p>
 * 1.筛选：学员姓名、创建时间、状态
 * 2.【更多筛选】包括：凭单ID、学号、退学类型、退学原因、退学班级、退费单号、创建人、创建时间
 *
 * @author 陈早庆
 * @update:[变更日期2023年12月07日][更改人姓名][变更描述]
 * @since 2023年12月07日
 */
@Data
public class JournalDropoutParams implements Serializable {
    /**
     * MY_COMMIT:我提交的、WAIT_APPROVAL:待我审核的、ALL：全部
     */
    private ApprovalType approvalType;
    /**
     * 学员姓名
     */
    private String studentName;
    /**
     * 学号
     */
    private String studentNo;
    /**
     * 创建时间-开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateSerializer.class)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    private LocalDate createdStartTime;
    /**
     * 创建时间-结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateSerializer.class)
    @JsonDeserialize(using = LocalDateDeserializer.class)
    private LocalDate createdEndTime;
    /**
     * 状态;枚举值：草稿｜DRAFT、待审批｜PENDING、审批中｜APPROVING、审批未通过｜REJECTED、已完成｜FINISHED
     */
    private String state;
    /**
     * 凭单ID
     */
    private String id;
    /**
     * 退费类型;枚举值：退学不退费｜、退学退费｜
     */
    private String type;
    /**
     * 退学原因CODE;来自字典表
     */
    private String reasonCode;
    /**
     * 退学的班级ID
     */
    private Integer clazzId;
    private String clazzName;
    /**
     * 退费单号
     * 退费凭单ID;只有在“退学退费”时才会产生
     */
    private String journalRefundId;
    /**
     * 创建人
     */
    private String createdBy;

    /**
     * 状态;枚举值：草稿｜DRAFT、待审批｜PENDING、审批中｜APPROVING、审批未通过｜REJECTED、已完成｜FINISHED
     */
    private String excludeState;

    /**
     * 是否特殊退费：0否、1是
     */
    private Boolean specialFlag;
    /**
     * 是否已开发票；枚举值：未开发票｜0、已开票｜1
     */
    private Boolean invoiceFlag;
    /**
     * 是否贷款学员；枚举值：非贷款学员｜0、贷款学员｜1
     */
    private Boolean loanFlag;
    /**
     * 所属公司编码;财务上退费资金所属的公司。
     */
    private String companyCode;
    /**
     * 所属公司名称；财务上退费资金所属的公司。
     */
    private String companyName;

    private List<String> formIds;
    private String flowCreatedBy;
    private String journalType;
    private List<EmployeeGroupBean> employeeGroups;
}
